package com.n9.qq.util;

import java.nio.ByteBuffer;
import java.util.Objects;

/**
 * byteBuffer工具类
 * @author ice
 * @since 2019/2/19 11:44
 */
public class BufUtils {

    /**
     * 4字节数组表示长度
     */
    private static final int INT_LEN = 4;


    /**
     * 从buf读取字符串,首4字节表示长度
     * @param buf
     * @return
     */
    public static String getStringFromBuf(ByteBuffer buf) {
        return new String(getBytesFromBuf(buf));
    }

    /**
     * 从buf读取数据,首4字节表示长度
     * @param buf
     * @return
     */
    public static byte[] getBytesFromBuf(ByteBuffer buf) {
        if (buf.remaining() < INT_LEN) {
            return null;
        }
        int len = buf.getInt() - INT_LEN;
        if (len > buf.remaining()) {
            return null;
        }

        return getBytesFromBuf(buf, len);
    }

    /**
     * 从buf中读取指定长度的字符串
     * @param buf
     * @param len
     * @return
     */
    public static String getStringFromBuf(ByteBuffer buf, int len) {
        byte[] data = getBytesFromBuf(buf, len);
        return new String(data);
    }

    /**
     * 从buf中读取指定长度的数据
     * @param buf
     * @param len
     * @return
     */
    public static byte[] getBytesFromBuf(ByteBuffer buf, int len) {
        if (len < 0) {
            return null;
        }
        if (len > buf.remaining()) {
            return null;
        }

        byte[] data = new byte[len];
        buf.get(data);
        return data;
    }
}
